package com.c2b.algorithm.leetcode.base;

/**
 * <a href="https://leetcode.cn/problems/crawler-log-folder/">文件夹操作日志搜集器</a>
 * <p>每当用户执行变更文件夹操作时，LeetCode 文件系统都会保存一条日志记录。
 * <b>下面给出对变更操作的说明：</b>
 * <ui>
 * <li>"../" ：移动到当前文件夹的父文件夹。如果已经在主文件夹下，则 继续停留在当前文件夹 。</li>
 * <li>"./" ：继续停留在当前文件夹。</li>
 * <li>"x/" ：移动到名为 x 的子文件夹中。题目数据 保证总是存在文件夹 x 。</li>
 * </ui>
 * 给你一个字符串列表 logs ，其中 logs[i] 是用户在 ith 步执行的操作。<br>
 * 文件系统启动时位于主文件夹，然后执行 logs 中的操作。
 * 执行完所有变更文件夹操作后，请你找出 返回主文件夹所需的最小步数 。
 * </p>
 * <pre>
 * 示例 1：
 *      输入：logs = ["d1/","d2/","../","d21/","./"]
 *      输出：2
 *      解释：执行 "../" 操作变更文件夹 2 次，即可回到主文件夹
 *
 * 示例 2：
 *      输入：logs = ["d1/","d2/","./","d3/","../","d31/"]
 *      输出：3
 *
 * 示例 3：
 *      输入：logs = ["d1/","../","../","../"]
 *      输出：0
 * </pre>
 *
 * @author c2b
 * @since 2023/4/13 11:53
 */
public class LC1598MinOperations_S {

    public int minOperations(String[] logs) {
        int level = 0;
        for (String log : logs) {
            if (log.equals("./")) {
                // do nothing
            } else if (log.equals("../")) {
                level = level == 0 ? 0 : level - 1;
            } else {
                ++level;
            }
        }
        return level;
    }

    public static void main(String[] args) {
        LC1598MinOperations_S lc1598MinOperations_s = new LC1598MinOperations_S();
        System.out.println(lc1598MinOperations_s.minOperations(new String[]{"d1/", "../", "../", "../"}));
    }
}
